<?php

require_once 'AbstractModel.php';

class PrestationBDD extends AbstractModel
{
	// Préparation des requêtes
	var $_truncate;
	var $_insert;
	var $_update_codefamille;
	var $_update_libellefamille;
	var	$_update_commentaire;
	var	$_update_nature;
	var $_selectAll;
	var $_selectPrestationNames;
	var $_delete;
	
	public function __construct()
    {
        parent::__construct('PRESTATION');
		// Connexion à la base de données
		$this->_truncate = $this->_db->prepare('TRUNCATE PRESTATION');
		$this->_insert = $this->_db->prepare('INSERT INTO PRESTATION (code_prestation, libelle_prestation, commentaire, nature) VALUES (?, ?, ?, ?);');

		$this->_update_codefamille = $this->_db->prepare('UPDATE PRESTATION SET code_prestation = :value WHERE code_prestation=:code_prestation;');
		$this->_update_libellefamille = $this->_db->prepare('UPDATE PRESTATION SET libelle_prestation = :value WHERE code_prestation=:code_prestation;');
		$this->_update_commentaire = $this->_db->prepare('UPDATE PRESTATION SET commentaire = :value WHERE code_prestation=:code_prestation;');
		$this->_update_nature = $this->_db->prepare('UPDATE PRESTATION SET nature = :value WHERE code_prestation=:code_prestation;');
		$this->_selectAll = $this->_db->prepare('SELECT * FROM PRESTATION');
		$this->_selectAll->setFetchMode(PDO::FETCH_ASSOC); // Facultatif
		$this->_selectPrestationNames = $this->_db->prepare('SELECT code_prestation, libelle_prestation FROM PRESTATION');
		$this->_selectPrestationNames->setFetchMode(PDO::FETCH_ASSOC); // Facultatif
		
		$this->_delete = $this->_db->prepare('DELETE FROM PRESTATION WHERE code_prestation=?;');
    }
	
	public function addFamille( $code_prestation, $libelle_prestation, $commentaire, $nature)
{
	// On sécurise les entrées
	$code_prestation = strip_tags($code_prestation);
	$libelle_prestation = strip_tags($libelle_prestation);
	$commentaire = strip_tags($commentaire);
	$nature = intval(strip_tags($nature));

	try{
			if ( $this->_insert->execute(array($code_prestation, $libelle_prestation, $commentaire, $nature)) )
			{
				echo "SUCCESS : La nouvelle prestation à été créé";
			}else{
				echo "FAILURE : La nouvelle prestation n'a PAS put être créé: ";
			}
		}
		catch(Exception $e)
		{
			echo "Échec : " . $e->getMessage();
		}
	}
	
	public function update($code_prestation, $attribute, $value)
	{
		// Sécurisation des données en entrée
		$code_prestation = strip_tags($code_prestation);
		$value = strip_tags($value);
		
		try{
			if ( $attribute == 'code_prestation'){
				$this->_update_codefamille->bindParam(':code_prestation', $code_prestation, PDO::PARAM_STR);
				$this->_update_codefamille->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_codefamille->execute();
			}elseif ( $attribute == 'libelle_prestation'){
				$this->_update_libellefamille->bindParam(':code_prestation', $code_prestation, PDO::PARAM_STR);
				$this->_update_libellefamille->bindParam(':value', $value, PDO::PARAM_STR); 
				$this->_update_libellefamille->execute();
			}elseif ( $attribute == 'commentaire'){
				$this->_update_commentaire->bindParam(':code_prestation', $code_prestation, PDO::PARAM_STR);
				$this->_update_commentaire->bindParam(':value', $value, PDO::PARAM_STR); 
				$this->_update_commentaire->execute();
			}elseif ( $attribute == 'nature'){
				$this->_update_nature->bindParam(':code_prestation', $code_prestation, PDO::PARAM_STR);
				$this->_update_nature->bindParam(':value', $value, PDO::PARAM_STR); 
				$this->_update_nature->execute();
			}
			echo "La modification de la prestation à été effectuée avec succés :)";
		}
		catch(Exception $e)
		{
			echo "Échec : " . $e->getMessage();
		}
	}
	
	public  function fetchAllPrestation()
	{
		$this->_selectAll->execute();
		return $listeFamille = $this->_selectAll->fetchAll();
	}
	
	public  function fetchPrestationNames()
	{
		$this->_selectPrestationNames->execute();
		return $listeFamille = $this->_selectPrestationNames->fetchAll();
	}
	
	public  function delete($code_prestation)
	{
		$this->_delete->execute(array($code_prestation));
	}
}
